package com.xfp.mapper;

import com.github.pagehelper.Page;
import com.xfp.anntation.AutoFill;
import com.xfp.enumclass.OperationClass;
import com.xfp.pojo.dto.*;
import com.xfp.pojo.entity.Role;
import com.xfp.pojo.entity.User;
import com.xfp.pojo.vo.RoleVo;
import com.xfp.pojo.vo.UserOperatorList;
import com.xfp.pojo.vo.UserQueryVo;
import com.xfp.pojo.vo.UserVo;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.web.bind.annotation.DeleteMapping;

import java.util.List;

@Mapper
public interface UserMapper  {
    @Select("select * from tb_user where login_name = #{loginName}")
    User selectOne(LoginDto dto);

    /**
     * 分页查询
     * @param dto
     * @return
     */
    Page<User> pageUser(UserQueryDto dto);

    /**
     * 修改人员
     * @param dto
     */
    @AutoFill(OperationClass.UPDATE)
    void updateUser(UserDto dto);

    /**
     * 获取用户基本信息
     * @param id
     * @return
     */
    @Select("select  * from tb_user where id = #{id}")
    UserVo findUserById(Integer id);

    /**
     *
     * @param dto
     * @return
     */
    @Select("select * from tb_role")
    List<Role> queryRole(RoleDto dto);

    /**
     * 新增用户
     * @param dto
     */
    @AutoFill(OperationClass.INSERT)
    @Insert("INSERT INTO tb_user (user_name, role_id, mobile, region_id, region_name, status, image, create_time, update_time,create_user,update_user)\n" +
            "  VALUES (#{userName}, #{roleId}, #{mobile}, #{regionId}, #{regionName}, #{status}, #{image}, #{createTime}, #{updateTime},#{createUser},#{updateUser});")
    void insertUser(UserDto dto);


    /**
     * 查询用户的角色
     * @param roleId
     * @return
     */
    @Select("select * from tb_role where role_id = #{roleId}")
    Role findRoleById(Long roleId);

    /**
     * 删除人员
     * @param id
     */
    @Delete("delete from tb_user where id = #{id}")
    void deleteUser(Long id);

    /**
     * 统计人员工作量
     * @param dto
     * @return
     */
    Page<User> searchUserWork(UserWorkPageDto dto);

    /**
     * 根据售货机获取运营人员列表
     */
    List<UserOperatorList> operatorList(String innerCode);

    /**
     * 根据售货机类型获取运维人员列表
     * @param innerCode
     * @return
     */
    List<UserOperatorList> repairerListList(String innerCode);
}
